package org.jeecg.modules.mes.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.mes.entity.MesSalaryCalculationRecord;
import org.jeecg.modules.mes.vo.MesSalaryCalculationVO;

import java.util.Date;
import java.util.List;

/**
 * @Description: 薪资计算服务接口
 * @Author: jeecg-boot
 * @Date: 2025-09-03
 * @Version: V1.0
 */
public interface IMesSalaryCalculationService extends IService<MesSalaryCalculationRecord> {

    /**
     * 计算单个任务参与者薪资
     * @param participantId 参与者ID
     * @return 薪资计算结果
     */
    MesSalaryCalculationVO calculateTaskSalary(String participantId);

    /**
     * 批量计算任务薪资
     * @param taskId 任务ID
     * @return 薪资计算结果列表
     */
    List<MesSalaryCalculationVO> calculateBatchTaskSalary(String taskId);

    /**
     * 计算员工日薪资
     * @param employeeId 员工ID
     * @param calculationDate 计算日期
     * @return 薪资计算结果列表
     */
    List<MesSalaryCalculationVO> calculateDailySalary(String employeeId, Date calculationDate);

    /**
     * 计算员工月薪资
     * @param employeeId 员工ID
     * @param year 年份
     * @param month 月份
     * @return 薪资计算结果列表
     */
    List<MesSalaryCalculationVO> calculateMonthlySalary(String employeeId, int year, int month);

    /**
     * 根据员工ID和日期范围查询薪资记录
     * @param employeeId 员工ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 薪资记录列表
     */
    List<MesSalaryCalculationRecord> getSalaryRecordsByEmployeeAndDateRange(String employeeId, Date startDate, Date endDate);

    /**
     * 根据任务ID查询薪资记录
     * @param taskId 任务ID
     * @return 薪资记录列表
     */
    List<MesSalaryCalculationRecord> getSalaryRecordsByTaskId(String taskId);

    /**
     * 获取按员工分组的薪资数据（树形结构）
     * @param salaryCalculationRecord 查询条件
     * @param pageNo 页码
     * @param pageSize 页大小
     * @param req 请求对象
     * @return 分组薪资数据
     */
    org.jeecg.common.api.vo.Result<?> getGroupedSalaryData(MesSalaryCalculationRecord salaryCalculationRecord, Integer pageNo, Integer pageSize, javax.servlet.http.HttpServletRequest req);
}
